iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

用Unity製作連線遊戲系列 第 10

Start with Simple Golang

  • 分享至 

  • xImage
  •  

今天正在找尋Golang相關的開發環境設定,找到了這二篇

本來想了解(之前雖然有碰過,但完全忘記了)golang的程式語法,但看著看著就被它的Dockerfile寫法混亂了。花了不少時間在了解它的Dockerfile到底為什麼那樣寫。

FROM --platform=${BUILDPLATFORM} golang:1.14.3-alpine AS build
WORKDIR /src
ENV CGO_ENABLED=0
COPY . .
ARG TARGETOS
ARG TARGETARCH
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM scratch AS bin-unix
COPY --from=build /out/example /

FROM bin-unix AS bin-linux
FROM bin-unix AS bin-darwin

FROM scratch AS bin-windows
COPY --from=build /out/example /example.exe

FROM bin-${TARGETOS} AS bin

而後就想說還是直接找網路連線的範例,但才看到gin的keyword就被拉到gqlgen,看了這段影片後,思路就有些偏離了。

Open Match的架構中,Game Fronted其實也就是網路上的一個server(service),要連接它的方式目前不外乎REST API或是GraphQL。想到很久以前有摸過GraphQL,那時是用Apollo寫Nodejs,如果這次能夠用golang寫server端,而c#寫client端也不錯。一想到這就傻傻地先決定讓Unity可以跑GraphQL。

以前在Unity端是用string的方式直post query過去,那時其實也還沒有GraphQL C# Client,但後來出現這個專案也不能用在手機上,所以就沒有特別理會它,但這次主要是用在Standalone上,或許可以來試試看它是否可以用在Unity裡。

NuGet下載了一大堆相依的dll後,按照之前gRPC的經驗,全數都提出來直接放在Plugins目錄下。並且直接跑官方的範例

var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/", new NewtonsoftJsonSerializer());

var personAndFilmsRequest = new GraphQLRequest
{
    Query = @"
    query PersonAndFilms($id: ID) {
        person(id: $id) {
            name
            filmConnection {
                films {
                    title
                }
            }
        }
    }",
    OperationName = "PersonAndFilms",
    Variables = new
    {
        id = "cGVvcGxlOjE="
    }
};

但另外用UniRx包起Task,執行後順利的看到了

Graphql Result

雖然沒有build exe檔,但在Unity Editor是可以成功跑起來的。本想趁勢進行golang端的撰寫,但看了一下golang的範例,感覺起來並不是可以像是C#端這快速就可以完成的。所以思考先找尋Graphql的開發協助工具。而官方的graphiql就是最先被找到的,而另一個工具Insomnia看起來相當的專業,附費的產品但是有免費的方案可用。如果接下來要進行用GraphQL串接前後端的溝通,勢必是不可少的。

另外,將過去的鐵人文章Think in GraphQL 系列找了出來,雖然時隔了二年,但之前有碰過的情況下,複習上希望可以很快速。

接下來要進行的就是利用Graphql的Mutation將要配對的資料交到Game Fronted,而Game Fronted一頭是對接Client,用Graphql的方式,而另一頭則是利用gRPC請求Open Match協助配對。流程上是愈加的清晰,但實作的困難度卻也大幅度的增加。不論是撰寫golang的部份,或是利用docker佈署到本地端進行測試,都蠻耗時的。


上一篇
Unity Game Flow
下一篇
GraphQL Codegen
系列文
用Unity製作連線遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言